﻿Imports CondorTravel.BE
Imports CondorTravel.BC
Imports CondorTravelUTIL.DL


Public Class InformeCampoVerMod
    Inherits PaginaBase

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Not Page.IsPostBack Then
            Dim Context As HttpContext = HttpContext.Current
            Dim codigo As Integer
            Dim tipoEvento As String

            If Context.Items.Contains("codigo") Then
                codigo = CInt(Context.Items("codigo"))
                hdnCodigoInforme.Value = codigo
                VerInformeCampo(codigo)
            End If

            If Context.Items.Contains("tipoEvento") Then
                tipoEvento = Context.Items("tipoEvento").ToString

                If tipoEvento = "E" Then 'Editar
                    lblTitulo.Text = "Modificar Informe de Campo"
                    HabilitarCampos()
                ElseIf tipoEvento = "V" Then 'Visualizar
                    lblTitulo.Text = "Visualizar Informe de Campo"
                    DeshabilitarCampos()
                    btnModificar.Visible = False
                    btnEnviar.Visible = False
                End If

            End If
        End If

    End Sub

    Private Sub HabilitarCampos()
        txtSupervisor.ReadOnly = False
        txtCantidadHospedajes.ReadOnly = False
        txtCantidadRestaurantes.ReadOnly = False
        txtTransporte.ReadOnly = False
        cboPais.Enabled = True
        cboCiudad.Enabled = True
        txtReferencia.ReadOnly = False
        txtObservaciones.ReadOnly = False
        txtServicios.ReadOnly = False
        txtFestividades.ReadOnly = False
        txtTramites.ReadOnly = False
    End Sub

    Private Sub DeshabilitarCampos()
        txtSupervisor.ReadOnly = True
        txtCantidadHospedajes.ReadOnly = True
        txtCantidadRestaurantes.ReadOnly = True
        txtTransporte.ReadOnly = True
        cboPais.Enabled = False
        cboCiudad.Enabled = False
        txtReferencia.ReadOnly = True
        txtObservaciones.ReadOnly = True
        txtServicios.ReadOnly = True
        txtFestividades.ReadOnly = True
        txtTramites.ReadOnly = True
    End Sub

    Private Sub VerInformeCampo(ByVal codigo As Integer)
        Dim objInformeCampoBC As New InformeCampoBC
        Dim objInformeCampo As InformeCampoBE = Nothing
        Dim bExito As Boolean = True
        Dim sMensaje As String = String.Empty

        objInformeCampo = objInformeCampoBC.VerInformeCampo(codigo, bExito, sMensaje)

        CargarPais()
        CargarCiudad(objInformeCampo.Ciudad.Pais.Codigo)

        txtSupervisor.Text = objInformeCampo.Supervisor
        txtCantidadHospedajes.Text = objInformeCampo.CantidadHospedajes.ToString
        txtCantidadRestaurantes.Text = objInformeCampo.CantidadRestaurantes.ToString
        txtTransporte.Text = objInformeCampo.Transporte
        cboPais.SelectedValue = objInformeCampo.Ciudad.Pais.Codigo
        cboCiudad.SelectedValue = objInformeCampo.Ciudad.Codigo
        txtReferencia.Text = objInformeCampo.Referencia
        txtObservaciones.Text = objInformeCampo.Observaciones

        CargarDetalleInforme(objInformeCampo.ListaDetalle)

    End Sub

    Private Sub CargarDetalleInforme(ByVal listaDetalleInformeCampo As List(Of DetalleInformeCampoBE))

        Dim item As ListItem

        For Each objDetalleInformeCampo As DetalleInformeCampoBE In listaDetalleInformeCampo

            item = New ListItem
            item.Text = objDetalleInformeCampo.Descripcion
            item.Value = objDetalleInformeCampo.Codigo

            Select Case objDetalleInformeCampo.TipoDetalle
                Case Constantes.TipoDetalleServicio
                    checkListaServicios.Items.Add(item)
                Case Constantes.TipoDetalleFestividad
                    checkListaFestividades.Items.Add(item)
                Case Constantes.TipoDetalleTramite
                    checkListaTramites.Items.Add(item)
            End Select

            checkListaServicios.DataBind()
            checkListaFestividades.DataBind()
            checkListaTramites.DataBind()

        Next

    End Sub

    Protected Sub cboPais_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cboPais.SelectedIndexChanged
        If cboPais.SelectedIndex >= 0 Then
            CargarCiudad(cboPais.SelectedValue)
        End If
    End Sub

    Private Sub CargarCiudad(ByVal iCodigoPais As Integer)
        Dim objCiudadBC As New CiudadBC
        Dim objPais As New PaisBE
        objPais.Codigo = iCodigoPais

        Dim listaCiudad As New List(Of CiudadBE)

        Dim objCiudadSeleccione As CiudadBE = New CiudadBE
        objCiudadSeleccione.Codigo = 0
        objCiudadSeleccione.Descripcion = "[Seleccione]"
        listaCiudad.Add(objCiudadSeleccione)

        listaCiudad.AddRange(objCiudadBC.ListarCiudad(objPais))
        cboCiudad.DataSource = listaCiudad

        cboCiudad.DataValueField = "Codigo"
        cboCiudad.DataTextField = "Descripcion"
        cboCiudad.DataBind()
    End Sub

    Private Sub CargarPais()
        Dim objPaisBC As New PaisBC

        Dim listaPais As New List(Of PaisBE)

        Dim objPaisSeleccione As PaisBE = New PaisBE
        objPaisSeleccione.Codigo = 0
        objPaisSeleccione.Descripcion = "[Seleccione]"
        listaPais.Add(objPaisSeleccione)

        listaPais.AddRange(objPaisBC.ListarPais)
        cboPais.DataSource = listaPais

        cboPais.DataValueField = "Codigo"
        cboPais.DataTextField = "Descripcion"
        cboPais.DataBind()
    End Sub

    Protected Sub btnAddServicios_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnAddServicios.Click

        Dim item As New ListItem

        If txtServicios.Text.Trim() = String.Empty Then
            GeneraScriptAjax("alert('Servicio no válido');", "ServicioNoValido")
        Else
            item.Text = txtServicios.Text
            txtServicios.Text = String.Empty
            checkListaServicios.Items.Add(item)
            checkListaServicios.DataBind()
        End If

    End Sub

    Protected Sub btnDeleteServicios_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnDeleteServicios.Click

        If checkListaServicios.Items.Count = 0 Then
            GeneraScriptAjax("alert('No hay servicios para eliminar');", "NoServicios")
        ElseIf Not existenItemsSeleccionados(checkListaServicios) Then
            GeneraScriptAjax("alert('No existem servicios seleccionados');", "NoSeleccionados")
        Else
            eliminarItemsSeleccionados(checkListaServicios)
        End If

    End Sub

    Protected Sub btnAddFestividades_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnAddFestividades.Click
        Dim item As New ListItem

        If txtFestividades.Text.Trim() = String.Empty Then
            GeneraScriptAjax("alert('Festividad no válida');", "FestividadNoValida")
        Else
            item.Text = txtFestividades.Text
            txtFestividades.Text = String.Empty
            checkListaFestividades.Items.Add(item)
            checkListaFestividades.DataBind()
        End If
    End Sub

    Protected Sub btnDeleteFestividades_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnDeleteFestividades.Click

        If checkListaFestividades.Items.Count = 0 Then
            GeneraScriptAjax("alert('No hay festividades para eliminar');", "NoFestividades")
        ElseIf Not existenItemsSeleccionados(checkListaFestividades) Then
            GeneraScriptAjax("alert('No existem festividades seleccionadas');", "NoSeleccionados")
        Else
            eliminarItemsSeleccionados(checkListaFestividades)
        End If

    End Sub

    Protected Sub btnAddTramites_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnAddTramites.Click
        Dim item As New ListItem

        If txtTramites.Text.Trim() = String.Empty Then
            GeneraScriptAjax("alert('Tramite no válido');", "TramiteNoValido")
        Else
            item.Text = txtTramites.Text
            txtTramites.Text = String.Empty
            checkListaTramites.Items.Add(item)
            checkListaTramites.DataBind()
        End If
    End Sub

    Protected Sub btnDeleteTramites_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnDeleteTramites.Click

        If checkListaTramites.Items.Count = 0 Then
            GeneraScriptAjax("alert('No hay tramites para eliminar');", "NoTramites")
        ElseIf Not existenItemsSeleccionados(checkListaTramites) Then
            GeneraScriptAjax("alert('No existem tramites seleccionados');", "NoSeleccionados")
        Else
            eliminarItemsSeleccionados(checkListaTramites)
        End If

    End Sub

#Region "Metodos para manejar los objetos CheckBoxList"

    Private Function existenItemsSeleccionados(ByVal checkList As CheckBoxList) As Boolean

        Dim seleccionados As Integer = 0

        For i As Integer = 0 To checkList.Items.Count - 1 Step 1
            If checkList.Items(i).Selected Then
                Return True
            End If
        Next

        Return False
    End Function

    Private Sub eliminarItemsSeleccionados(ByVal checkList As CheckBoxList)

        For i As Integer = checkList.Items.Count - 1 To 0 Step -1

            If checkList.Items(i).Selected Then
                checkList.Items.RemoveAt(i)
            End If
        Next

    End Sub

#End Region

    Private Function ValidarFormulario() As Boolean

        If txtSupervisor.Text.Trim = String.Empty Then
            Alerta("Debe ingresar el Supervisor", False, String.Empty)
            Return False
        ElseIf cboPais.SelectedIndex = 0 Then
            Alerta("Debe seleccionar el pais", False, String.Empty)
            Return False
        ElseIf cboCiudad.SelectedIndex = 0 Then
            Alerta("Debe seleccionar la ciudad", False, String.Empty)
            Return False
        ElseIf txtReferencia.Text.Trim = String.Empty Then
            Alerta("Debe ingresar la referencia", False, String.Empty)
            Return False
        ElseIf txtCantidadHospedajes.Text.Trim = String.Empty Then
            Alerta("Debe ingresar la cantidad de hospedajes", False, String.Empty)
            Return False
        ElseIf txtCantidadRestaurantes.Text.Trim = String.Empty Then
            Alerta("Debe ingresar la cantidad de restaurantes", False, String.Empty)
            Return False
        ElseIf txtTransporte.Text.Trim = String.Empty Then
            Alerta("Debe ingresar el transporte", False, String.Empty)
            Return False
        ElseIf txtObservaciones.Text.Trim = String.Empty Then
            Alerta("Debe ingresar las observaciones", False, String.Empty)
            Return False
        ElseIf checkListaServicios.Items.Count = 0 Then
            Alerta("Debe ingresar los servicios", False, String.Empty)
            Return False
        ElseIf checkListaFestividades.Items.Count = 0 Then
            Alerta("Debe ingresar las festividades", False, String.Empty)
            Return False
        ElseIf checkListaTramites.Items.Count = 0 Then
            Alerta("Debe ingresar los tramites y/o festividades", False, String.Empty)
            Return False
        End If

        Return True
    End Function

    Private Sub CargarDetalle(ByVal checkListaDetalle As CheckBoxList, ByRef listaDetalle As List(Of DetalleInformeCampoBE))

        Dim strUsuario As String = CType(Session("usuario"), UsuariosBE).CodUsuario
        Dim objDetalleInformeCampo As DetalleInformeCampoBE

        For i As Integer = 0 To checkListaDetalle.Items.Count - 1 Step 1

            objDetalleInformeCampo = New DetalleInformeCampoBE
            '  objDetalleInformeCampo.Codigo = checkListaDetalle.Items(i).Value
            objDetalleInformeCampo.Descripcion = checkListaDetalle.Items(i).Text

            Select Case checkListaDetalle.ClientID
                Case "contenidoModulo_checkListaServicios"
                    objDetalleInformeCampo.TipoDetalle = Constantes.TipoDetalleServicio
                Case "contenidoModulo_checkListaFestividades"
                    objDetalleInformeCampo.TipoDetalle = Constantes.TipoDetalleFestividad
                Case "contenidoModulo_checkListaTramites"
                    objDetalleInformeCampo.TipoDetalle = Constantes.TipoDetalleTramite
            End Select

            listaDetalle.Add(objDetalleInformeCampo)
        Next
    End Sub


    Protected Sub btnModificar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnModificar.Click
        If ValidarFormulario() Then
            ActualizarInformeCampo(Constantes.EstadoGrabadoInformeCampo)
        End If
    End Sub

    Protected Sub btnEnviar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnEnviar.Click
        If ValidarFormulario() Then
            ActualizarInformeCampo(Constantes.EstadoEnviadoInformeCampo)
        End If
    End Sub

    Private Sub ActualizarInformeCampo(ByVal estado As String)

        Dim objInformeCampoBC As New InformeCampoBC
        Dim objInformeCampo As New InformeCampoBE
        Dim strUsuario As String = CType(Session("usuario"), UsuariosBE).CodUsuario

        objInformeCampo.Codigo = CInt(hdnCodigoInforme.Value)
        objInformeCampo.Supervisor = txtSupervisor.Text.Trim
        objInformeCampo.Ciudad.Codigo = cboCiudad.SelectedValue
        objInformeCampo.CantidadHospedajes = CInt(txtCantidadHospedajes.Text.Trim)
        objInformeCampo.CantidadRestaurantes = CInt(txtCantidadRestaurantes.Text.Trim)
        objInformeCampo.Transporte = txtTransporte.Text.Trim
        objInformeCampo.Referencia = txtReferencia.Text.Trim
        objInformeCampo.Observaciones = txtObservaciones.Text.Trim
        objInformeCampo.Estado = estado 'Grabado o Enviado
        objInformeCampo.Usuario = strUsuario
        Dim listaDetalle As New List(Of DetalleInformeCampoBE)

        CargarDetalle(checkListaServicios, listaDetalle)
        CargarDetalle(checkListaFestividades, listaDetalle)
        CargarDetalle(checkListaTramites, listaDetalle)

        objInformeCampo.ListaDetalle = listaDetalle

        Dim bExito As Boolean = False
        Dim sMensaje As String = String.Empty

        objInformeCampoBC.ActualizarInformeCampo(objInformeCampo, bExito, sMensaje)

        If Not bExito Then
            lblMensaje.Text = "Error: Hubo un problema al actualizar el informe de campo."
            limpiarFormulario()
        Else
            If estado = Constantes.EstadoGrabadoInformeCampo Then
                Alerta("El informe de campo se actualizo satisfactoriamente", True, "InformeCampo.aspx")
            Else
                Alerta("El informe de campo se envio satisfactoriamente", True, "InformeCampo.aspx")
            End If
        End If

    End Sub

    Private Sub limpiarFormulario()

        txtSupervisor.Text = String.Empty
        cboPais.SelectedIndex = 0
        cboCiudad.SelectedIndex = 0
        txtReferencia.Text = String.Empty
        txtCantidadHospedajes.Text = String.Empty
        txtCantidadRestaurantes.Text = String.Empty
        txtTransporte.Text = String.Empty
        txtObservaciones.Text = String.Empty
        checkListaServicios.Items.Clear()
        checkListaFestividades.Items.Clear()
        checkListaTramites.Items.Clear()

    End Sub

    Protected Sub btnRegresar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnRegresar.Click
        Response.Redirect("InformeCampo.aspx", True)
    End Sub
End Class
